<?php
require "./function.php";
/**
 * @Author: Wherein
 * @Date: 2021-03-15 09:31
 * @covers 简单工厂模式(静态工厂模式)
 * @Descripttion: 实现了创建者和调用者的分离。
 * @example 使用场景: 1、日志记录器：记录可能记录到本地硬盘、系统事件、远程服务器等，用户可以选择记录日志到什么地方。2、数据库访问，当用户不知道最后系统采用哪一类数据库，以及数据库可能有变化时。 3、设计一个连接服务器的框架，需要三个协议，"POP3"、"IMAP"、"HTTP"，可以把这三个作为产品类，共同实现一个接口。
 */
// 抽象运算类
abstract class Operate
{
    abstract static function getVal($i, $j);
}

// 加法类
class OperateAdd extends Operate
{
    public static function getVal($i, $j)
    {
        return $i + $j;
    }
}

// 乘法法
class OperateMul extends Operate
{
    public static function getVal($i, $j)
    {
        return $i * $j;
    }
}

// 抽象工厂类
abstract class Factory
{
    public static function operateAdd(){
        return new OperateAdd();
    }

    public static function operateMul(){
        return new OperateMul();
    }
}

$f = Factory::operateAdd();
dd($f->getVal(5, 6));
